//
// Created by Immortal on 4/29/2021.
//

#ifndef RACOON_TEST_H
#define RACOON_TEST_H
#include "Racoon.h"

class Test : public Racoon
{
public:
    Test(uint16_t uPort, const char* pAccessDir);
    ~Test();


public:
    static void MyFun(Http& http, void* pArg)
    {

        Test* pThis = (Test*)pArg;
        //***************************************************************************
        // 这里是获取http请求的内容
        //***************************************************************************
        //获取请求类型
        Http::REQ_TYPE rt = http.GetReqType();
        switch(rt)
        {
            case Http::REQ_NULL:
                std::cout << "错误请求类型" << std::endl;
                break;
            case Http::REQ_GET:
                std::cout << "GET请求类型" << std::endl;
                break;
            case Http::REQ_POST:
                std::cout << "POST请求类型" << std::endl;
                break;
        }

        //获取请求类型，返回值为字串
        std::cout << "请求类型: " << http.GetReqTypeStr() << std::endl;
        //获取请求路径
        std::cout << "请求路径: " << http.GetReqPath() << std::endl;
        //请求后缀
        std::cout << "请求后缀: " << http.GetReqSuffix() << std::endl;
        //获取请求字段
        std::cout << "请求字段: " << http.GetReqField("Host") << std::endl;
        std::cout << "请求字段: " << http.GetReqField("Accept") << std::endl;
        //获取cookie
        std::cout << "Cookie: " << http.GetReqCookie("sid") << std::endl;
        //获取请求内容
        std::cout << "请求内容: " << http.GetReqContent() << std::endl;
        //获取请求内容长度
        std::cout << "请求内容长度: " << http.GetReqContentSize() << std::endl;

        //***************************************************************************
        // 这里是设置http相应
        //***************************************************************************

//        //设置响应状态码
//        http.SetResStatusCode(sc200); //sc200 sc400 sc404 具体可以再Http.h上边自行添加
//        //设置字段
//        http.SetResField("Key1", "anc123");
//        //设置内容类型
//        http.SetContentType(CT_IMAGE_JPEG); // 其实就是设置 Content-Type 这个字段的值，也可以再Http.h上边自行添加
//        //设置Cookie
//        http.SetCookie("Cookie_name1", "ASDFGHJK213"); //直接设置cookie的名称和值即可
//        //设置内容
//        http.SetContent("1234567890", 10);
//        //追加内容
//        http.AppendContent("abc", 3);

        //设置响应文件
        std::string strFileFullPath = pThis->m_pAccessDir;
        strFileFullPath += "/1.jpg";
        http.SetResFile(strFileFullPath.c_str());//PS: 如果用了响应文件这个函数，之前设置的内容将会被覆盖掉


    }
private:
    int x;
    //访问目录
    const char* m_pAccessDir;
};


#endif //RACOON_TEST_H
